%%
clear all;
% 生成 D个中继器
D=30;
%总共有 NP 个解
NP=100;
%范围为 N*N的位置
N=60;
DT=20;
count=1;
a=1;
near_location=5; % 后面代码也要改

% 任务点对应位置；
location_TU=[0,0]; % %%%%%%先考虑一个
% EOC对应位置
location_EOC=[N,N];

while count<=NP % 达到NP个解   
% 初始化中继器对应位置
location_RU=N*rand(D,2); 
location_RU(1,:)=near_location*rand(1,2); % near_location需要修改

%创建邻接矩阵
distance=pdist([location_TU;location_RU;location_EOC]);
distance(distance>DT)=0;% 大于20KM,断开路径可能性
adjMatrix=squareform(distance);
adjMatrix(:,1)=0; %第一列等于0

% 判断是否有效且连通
judge=RDFS(adjMatrix);

a=a+1;%% 总共迭代次数
if judge==1
    location_NP(:,:,count)=location_RU; % 对应NP个有效解， 为D*2*NP 维
    count=count+1;
end


end

result=ABC(location_TU,location_NP,location_EOC,DT,N);

%% 画图
size(result)
min_n=ceil((N-near_location)*sqrt(2)/DT+1)
scatter(result(:,1),result(:,2),'fill');
hold on
grid on
scatter(location_EOC(:,1),location_EOC(:,2),'y','fill');
scatter(location_TU(:,1),location_TU(:,2),'R','fill');
legend('中继器' ,' EOC','任务点');
center=ones(size(result,1),1)*DT;
viscircles(result,center,'LineWidth',1);
viscircles(location_TU,near_location,'Color','k','LineWidth',1,'LineStyle','--');
hold off;



